package QianFeng06.MD5Demo;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Base64;

/**MD5算法
 * MD5即Message-Digest Algorithm 5，用于确保信息传输完整一致。
 **/
public class MD5 {
    public static void main(String[] args) {
        String password = "admin123456";
        System.out.println(login(password));
    }

    private static boolean login(String password) {
        //存储的密文
        String savePassword = "pmq7VoTEWWLYh1ZPCDRujQ==";
        return savePassword.equals(md5(password));
    }

    private static String md5(String password) {
        try {
            MessageDigest md = MessageDigest.getInstance("md5");
            //通过MD5计算摘要
            byte[] bytes = md.digest(password.getBytes(StandardCharsets.UTF_8));
            //JDK1.8使用的方法
            return Base64.getEncoder().encodeToString(bytes);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }

    //展示MD5算法的运用
    private static void test() {
        String password = "admin123456";//明文（原文）
        String savePassword = "pmq7VoTEWWLYh1ZPCDRujQ==";//存储的密文
        try {
            MessageDigest md = MessageDigest.getInstance("md5");
            //通过MD5计算摘要
            byte[] bytes = md.digest(password.getBytes(StandardCharsets.UTF_8));
            System.out.println(Arrays.toString(bytes));
            //String mdStr = new String(bytes);
            //System.out.println(mdStr);
            //a-z A-Z 0-9 / * BASE64编码算法
            //JDK1.8使用的方法
            String str = Base64.getEncoder().encodeToString(bytes);//将密码编码成一串字符串达成加密过程
            System.out.println(str);

            /*//JDK1.8之前使用的方法
            //编码
            BASE64Encoder base64Encoder = new BASE64Encoder();
            String str1 = base64Encoder.encode(bytes);
            //解码
            BASE64Decoder base64Decoder = new BASE64Decoder();
            base64Decoder.decodeBuffer(str1);
            System.out.println(str1);*/
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } /*catch (IOException e) {
            e.printStackTrace();
        }*/
    }
}
